//
//  StatusCellPictureView.swift
//  sinaWeiBo
//
//  Created by smartlei on 15/10/20.
//  Copyright © 2015年 smartlei. All rights reserved.
//

import UIKit
import SDWebImage

let StatusCellPictureViewCellReuseID = "StatusCellPictureViewCellReuseID"
let StatusCellPictureViewCellMargin = 5

//MARK - CollectionView实现
class StatusCellPictureView: UICollectionView {
    
    var  statusViewModel: StatusViewModel? {
        didSet {
            
//            当你想调整当前视图的时候，调用这个方法，这样它就可以使用最合适的空间。UIKit视图具体调整自己按照自己的内在需求。在某些情况下，如果一个视图没有视图，它可能本身的大小到屏幕边界。因此，如果你希望得到一个给定的视图大小来为它的父视图，你应该在调用该方法之前将其添加到父视图中。
//            你不应该重写这个方法。如果你想更改默认大小的信息视图，覆盖sizethatfits：相反。该方法执行任何需要的计算，并返回到该方法，从而使更改。
            sizeToFit()
            //需要调用 reloadData 不然不会刷新数据源方法：都需要的，其他的一般写在网络下载完毕后再刷新，但这里没有网络任务，所以在这里刷新一次
            reloadData()
            
        }
    }
    override func sizeThatFits(size: CGSize) -> CGSize {
        //返回PictureView的宽高，宽度无效
       // self.statusViewModel?.rowheight = CGFloat(20)
        return calculatePictureViewHight()
    }

    init() {
        
        let  layout = UICollectionViewFlowLayout()
        layout.minimumInteritemSpacing = StatusCellMargin/2
        layout.minimumLineSpacing = StatusCellMargin
        
        super.init(frame: CGRectZero, collectionViewLayout: layout)
        
        dataSource = self
        
        registerClass(StatusPictureViewCell.self, forCellWithReuseIdentifier: StatusCellPictureViewCellReuseID)
//        //设置UI
        setupUI()
        
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

//MARK - 设置页面元素和计算行高
extension StatusCellPictureView {
    
    private func setupUI() {

        backgroundColor = UIColor.whiteColor()
    }
    //根据传入模型的配图列表计算出需要的PictureView高度
    private func calculatePictureViewHight() -> CGSize {
        //cell中配图 url连接列表
        //var pic_urlsURL: [NSURL]?
        //每行显示个数
        let countPreLine: CGFloat = 3
        
        let itemSizeWH = (kScreenWidth -  StatusCellMargin * (countPreLine + 1))/countPreLine
        
        //重新获取CollectionView 的layout,进行设置
        let  layout = collectionViewLayout as! UICollectionViewFlowLayout
        
        layout.itemSize = CGSize(width: itemSizeWH, height: itemSizeWH)
 
        // statusViewModel?.pic_urlsURL?.count返回带"?"的数据 ，两问下 不行给 0
        let urlCount = statusViewModel?.pic_urlsURL?.count ?? 0
        
        if  urlCount == 0 {
            CGSizeZero
        } else if urlCount == 1 {
            // TODO - 临时设置，稍后修改
            
            var size = CGSize(width: 150, height: 120)
            
            if let key = statusViewModel?.pic_urlsURL?.last?.absoluteString {
                
                let img = SDWebImageManager.sharedManager().imageCache.imageFromDiskCacheForKey(key)
                size = img.size
            }
            
            let imgScale = size.height / size.width
            //过窄处理
            size.width = size.width < 40 ? 40 : size.width
            //过宽处理
            if size.width > 300 {
                size.width = 300
                size.height = imgScale * size.width
            }
            
            
            
            //设置itemsize
            layout.itemSize = size
            
            return size
        } else if urlCount == 4 {
            
            let  viewWH =   StatusCellMargin +  2 * itemSizeWH
            
            return CGSize(width: viewWH, height: viewWH)
            
        } else {
            // 1 2 3
            // 5 6
            // 7 8 9
            //计算出需要的行数
           
            let  lineNum = CGFloat( ( urlCount - 1 ) / Int(countPreLine)  + 1)
            
            let  viewH = lineNum * itemSizeWH + (lineNum - 1 ) * StatusCellMargin
            
            let  viewW = lineNum * itemSizeWH + ( countPreLine  - 1) * StatusCellMargin
            
            return CGSize(width: viewW, height: viewH)
        }
        return CGSizeZero
    }
}
//MARK - 实现数据源方法
extension StatusCellPictureView: UICollectionViewDataSource {
    
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return statusViewModel?.pic_urlsURL?.count ?? 0
    }
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(StatusCellPictureViewCellReuseID, forIndexPath: indexPath) as! StatusPictureViewCell
     
       // cell.backgroundColor = UIColor.redColor()
        
        cell.imgURL = statusViewModel?.pic_urlsURL![indexPath.item]
        
        return cell
    }
    
}

class StatusPictureViewCell: UICollectionViewCell {
    
    lazy var imgView = UIImageView()
    
    var  imgURL: NSURL? {
        didSet {
            //print(imgURL)
            imgView.sd_setImageWithURL(imgURL!, placeholderImage: nil, options: [.RefreshCached,.RetryFailed])

        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        //添加子视图
        contentView.addSubview(imgView)
        //写这里不行，当视图上控件的frame发生变化后
        //imgView.frame = contentView.bounds
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        imgView.frame = contentView.bounds
    }

}


